/*
  DisplayC.C  by Wei Cai
  Interface between Paradis and X-window display module
*/
#ifndef NO_XWINDOW

#include <sys/select.h>
#include "display.h"
#include "DisplayC.h"
#include "Param.h"
#include "Parse.h"

Fatal(const char *format, ...);


YWindow *win;

/* Window control variables */
int enable_window;
unsigned colors[MAXCOLOR];
double point_radius, line_width;
int win_width, win_height;
char win_name[100];
char color_name[MAXCOLOR][COLORNAMELEN];
char bgcolor_name[COLORNAMELEN];
int sleepseconds;
int color_scheme;
int reversergb;
double rotateangles[4];
double pbcshift[3];
double maxpointradius, maxlinewidth;
void AllocColors();

void WindowParamInit(ParamList_t *WPList)
{
        int  i;
        char name[100];

/*
 *      Note: Parameters need only be initialized if their
 *      default values are non-zero.
 */
        WPList->paramCnt = 0;
        WPList->varList = (VarData_t *)NULL;

        BindVar(WPList, "enable_window", &enable_window, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "win_name", win_name, V_STRING, 1, VFLAG_NULL);
        BindVar(WPList, "win_width", &win_width, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "win_height", &win_height, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "scalepoints", &scalepoints, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "point_radius", &point_radius, V_DBL, 1, VFLAG_NULL);
        BindVar(WPList, "maxpointradius", &maxpointradius, V_DBL, 1,
                VFLAG_NULL);
        BindVar(WPList, "line_width", &line_width, V_DBL, 1, VFLAG_NULL);
        BindVar(WPList, "maxlinewidth", &maxlinewidth, V_DBL, 1, VFLAG_NULL);
        BindVar(WPList, "rotateangles", rotateangles, V_DBL, 4, VFLAG_NULL);
        BindVar(WPList, "reversergb", &reversergb, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "pbcshift", pbcshift, V_DBL, 3, VFLAG_NULL);
        BindVar(WPList, "sleepseconds", &sleepseconds, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "color_scheme", &color_scheme, V_INT, 1, VFLAG_NULL);
        BindVar(WPList, "bgcolor", bgcolor_name, V_STRING, 1, VFLAG_NULL);
            
        for (i = 0; i < MAXCOLOR; i++) {
            sprintf(name, "color%02d", i);
            BindVar(WPList, (char *)name, (char *)color_name[i],
                    V_STRING, 1, VFLAG_NULL);
        }

        enable_window  = 1;
        win_width      = 500;
        win_height     = 500;
        point_radius   = 2.0;
        maxpointradius = 8.0;
        line_width     = 2.0;
        maxlinewidth   = 4.0;
        reversergb     = 1;
        color_scheme   = 1;
        sleepseconds   = 3;

        rotateangles[0] =   0.0;  /* horizontal */
        rotateangles[1] = -90.0;  /* vertical   */
        rotateangles[2] =   0.0;  /* spin       */
        rotateangles[3] =   1.2;  /* scale      */

        strcpy(win_name, "ParaDiS");

        strcpy(bgcolor_name,   "grey30");
        strcpy(color_name[ 0], "red");       /* normal node color */
        strcpy(color_name[ 1], "magenta");   /* cross boundary link color */
        strcpy(color_name[ 2], "turquoise");
        strcpy(color_name[ 3], "green");
        strcpy(color_name[ 4], "SkyBlue2");
        strcpy(color_name[ 5], "gold3");
        strcpy(color_name[ 6], "chocolate");
        strcpy(color_name[ 7], "yellow");
        strcpy(color_name[ 8], "azure4");
        strcpy(color_name[ 9], "ivory3");   /* domain boundary color */
        strcpy(color_name[10], "ivory3");   /* frame color */
        
        return;

}

void ParseWindowSpecFile(FILE *fp, ParamList_t *WPList)
{
        int  maxTokenLen, tokenType, pIndex, okay;
        int  valType, numVals;
        char token[256];
        void *valList;

        maxTokenLen = sizeof(token);
        tokenType = TOKEN_GENERIC;

        while (1) {
/*
 *          Next token (if any) should be a parameter name...
 */
            tokenType = GetNextToken(fp, token, maxTokenLen);

/*
 *          If we hit the end of the file (i.e. no more tokens)
 *          we're done...
 */
            if (tokenType == TOKEN_NULL) {
                break;
            }

/*
 *          If there were any parsing errors, just abort
 */
            if (tokenType == TOKEN_ERR) {
                Fatal("ReadControlFile: Error parsing file window spec file");
            }
/*
 *          Obtain values associated with the parameter; don't
 *          save values for unknown/obsolete parameters.
 */
            pIndex = LookupParam(WPList, token);

            if (pIndex < 0) {
                printf("Ignoring unrecognized parameter (%s) type (%d)\n",
                       token, tokenType);
                valType = V_NULL;
                numVals = 0;
                valList = (void *)NULL;
            } else {
                valType = WPList->varList[pIndex].valType;
                numVals = WPList->varList[pIndex].valCnt;
                valList = WPList->varList[pIndex].valList;
            }

            okay = GetParamVals(fp, valType, numVals, valList);
            if (!okay) {
                Fatal("Error obtaining values for parameter %s",
                       WPList->varList[pIndex].varName);
            }
        }

        return;
}


void ReadWindowSpec(char *fname)
{
        ParamList_t windowParamList;
        FILE *fp;

        WindowParamInit(&windowParamList);

        fp = fopen(fname,"r");
        if (fp != (FILE *)NULL) {
            ParseWindowSpecFile(fp, &windowParamList);
            fclose(fp);
        } else {
            printf("Warning: Unable to open ParaDiS X-display spec file %s.\n"
                   "    Using default view instead.\n", fname);
        }

        if (enable_window) {

            win = new YWindow(win_width,win_height,win_name,true,true,false);

            if (win == NULL) {
                printf("create window failure!\n");
            }

            if (reversergb) {
                win->reversergb();
            }
        
            AllocColors();

            win->scalepoints = scalepoints;
            win->maxpointradius = maxpointradius;
            win->maxlinewidth = maxlinewidth;
            win->horizontalRot(rotateangles[0]*M_PI/180);
            win->verticalRot(rotateangles[1]*M_PI/180);
            win->spinRot(rotateangles[2]*M_PI/180);

            if (rotateangles[3] != 0) {
                win->zoom(rotateangles[3]);
            }

            win->saveRot(); win->saveScale();

#ifndef NO_THREAD
            win->Run();
#endif
        }
/*
 *      The parameter list is no longer needed, so be sure to free
 *      it before returning.
 */
        if (windowParamList.paramCnt > 0) {
            free(windowParamList.varList);
        }

        return;
}


    
//! $XConsortium: rgb.txt,v 10.41 94/02/20 18:39:36 rws Exp $
struct { int r, g, b; const char *name; } RGBTable[]={
    { 255, 250, 250, "snow" }, 
    { 248, 248, 255, "ghost white" }, 
    { 248, 248, 255, "GhostWhite" }, 
    { 245, 245, 245, "white smoke" }, 
    { 245, 245, 245, "WhiteSmoke" }, 
    { 220, 220, 220, "gainsboro" }, 
    { 255, 250, 240, "floral white" }, 
    { 255, 250, 240, "FloralWhite" }, 
    { 253, 245, 230, "old lace" }, 
    { 253, 245, 230, "OldLace" }, 
    { 250, 240, 230, "linen" }, 
    { 250, 235, 215, "antique white" }, 
    { 250, 235, 215, "AntiqueWhite" }, 
    { 255, 239, 213, "papaya whip" }, 
    { 255, 239, 213, "PapayaWhip" }, 
    { 255, 235, 205, "blanched almond" }, 
    { 255, 235, 205, "BlanchedAlmond" }, 
    { 255, 228, 196, "bisque" }, 
    { 255, 218, 185, "peach puff" }, 
    { 255, 218, 185, "PeachPuff" }, 
    { 255, 222, 173, "navajo white" }, 
    { 255, 222, 173, "NavajoWhite" }, 
    { 255, 228, 181, "moccasin" }, 
    { 255, 248, 220, "cornsilk" }, 
    { 255, 255, 240, "ivory" }, 
    { 255, 250, 205, "lemon chiffon" }, 
    { 255, 250, 205, "LemonChiffon" }, 
    { 255, 245, 238, "seashell" }, 
    { 240, 255, 240, "honeydew" }, 
    { 245, 255, 250, "mint cream" }, 
    { 245, 255, 250, "MintCream" }, 
    { 240, 255, 255, "azure" }, 
    { 240, 248, 255, "alice blue" }, 
    { 240, 248, 255, "AliceBlue" }, 
    { 230, 230, 250, "lavender" }, 
    { 255, 240, 245, "lavender blush" }, 
    { 255, 240, 245, "LavenderBlush" }, 
    { 255, 228, 225, "misty rose" }, 
    { 255, 228, 225, "MistyRose" }, 
    { 255, 255, 255, "white" }, 
    { 0, 0, 0, "black" }, 
    { 47, 79, 79, "dark slate gray" }, 
    { 47, 79, 79, "DarkSlateGray" }, 
    { 47, 79, 79, "dark slate grey" }, 
    { 47, 79, 79, "DarkSlateGrey" }, 
    { 105, 105, 105, "dim gray" }, 
    { 105, 105, 105, "DimGray" }, 
    { 105, 105, 105, "dim grey" }, 
    { 105, 105, 105, "DimGrey" }, 
    { 112, 128, 144, "slate gray" }, 
    { 112, 128, 144, "SlateGray" }, 
    { 112, 128, 144, "slate grey" }, 
    { 112, 128, 144, "SlateGrey" }, 
    { 119, 136, 153, "light slate gray" }, 
    { 119, 136, 153, "LightSlateGray" }, 
    { 119, 136, 153, "light slate grey" }, 
    { 119, 136, 153, "LightSlateGrey" }, 
    { 190, 190, 190, "gray" }, 
    { 190, 190, 190, "grey" }, 
    { 211, 211, 211, "light grey" }, 
    { 211, 211, 211, "LightGrey" }, 
    { 211, 211, 211, "light gray" }, 
    { 211, 211, 211, "LightGray" }, 
    { 25, 25, 112, "midnight blue" }, 
    { 25, 25, 112, "MidnightBlue" }, 
    { 0, 0, 128, "navy" }, 
    { 0, 0, 128, "navy blue" }, 
    { 0, 0, 128, "NavyBlue" }, 
    { 100, 149, 237, "cornflower blue" }, 
    { 100, 149, 237, "CornflowerBlue" }, 
    { 72, 61, 139, "dark slate blue" }, 
    { 72, 61, 139, "DarkSlateBlue" }, 
    { 106, 90, 205, "slate blue" }, 
    { 106, 90, 205, "SlateBlue" }, 
    { 123, 104, 238, "medium slate blue" }, 
    { 123, 104, 238, "MediumSlateBlue" }, 
    { 132, 112, 255, "light slate blue" }, 
    { 132, 112, 255, "LightSlateBlue" }, 
    { 0, 0, 205, "medium blue" }, 
    { 0, 0, 205, "MediumBlue" }, 
    { 65, 105, 225, "royal blue" }, 
    { 65, 105, 225, "RoyalBlue" }, 
    { 0, 0, 255, "blue" }, 
    { 30, 144, 255, "dodger blue" }, 
    { 30, 144, 255, "DodgerBlue" }, 
    { 0, 191, 255, "deep sky blue" }, 
    { 0, 191, 255, "DeepSkyBlue" }, 
    { 135, 206, 235, "sky blue" }, 
    { 135, 206, 235, "SkyBlue" }, 
    { 135, 206, 250, "light sky blue" }, 
    { 135, 206, 250, "LightSkyBlue" }, 
    { 70, 130, 180, "steel blue" }, 
    { 70, 130, 180, "SteelBlue" }, 
    { 176, 196, 222, "light steel blue" }, 
    { 176, 196, 222, "LightSteelBlue" }, 
    { 173, 216, 230, "light blue" }, 
    { 173, 216, 230, "LightBlue" }, 
    { 176, 224, 230, "powder blue" }, 
    { 176, 224, 230, "PowderBlue" }, 
    { 175, 238, 238, "pale turquoise" }, 
    { 175, 238, 238, "PaleTurquoise" }, 
    { 0, 206, 209, "dark turquoise" }, 
    { 0, 206, 209, "DarkTurquoise" }, 
    { 72, 209, 204, "medium turquoise" }, 
    { 72, 209, 204, "MediumTurquoise" }, 
    { 64, 224, 208, "turquoise" }, 
    { 0, 255, 255, "cyan" }, 
    { 224, 255, 255, "light cyan" }, 
    { 224, 255, 255, "LightCyan" }, 
    { 95, 158, 160, "cadet blue" }, 
    { 95, 158, 160, "CadetBlue" }, 
    { 102, 205, 170, "medium aquamarine" }, 
    { 102, 205, 170, "MediumAquamarine" }, 
    { 127, 255, 212, "aquamarine" }, 
    { 0, 100, 0, "dark green" }, 
    { 0, 100, 0, "DarkGreen" }, 
    { 85, 107, 47, "dark olive green" }, 
    { 85, 107, 47, "DarkOliveGreen" }, 
    { 143, 188, 143, "dark sea green" }, 
    { 143, 188, 143, "DarkSeaGreen" }, 
    { 46, 139, 87, "sea green" }, 
    { 46, 139, 87, "SeaGreen" }, 
    { 60, 179, 113, "medium sea green" }, 
    { 60, 179, 113, "MediumSeaGreen" }, 
    { 32, 178, 170, "light sea green" }, 
    { 32, 178, 170, "LightSeaGreen" }, 
    { 152, 251, 152, "pale green" }, 
    { 152, 251, 152, "PaleGreen" }, 
    { 0, 255, 127, "spring green" }, 
    { 0, 255, 127, "SpringGreen" }, 
    { 124, 252, 0, "lawn green" }, 
    { 124, 252, 0, "LawnGreen" }, 
    { 0, 255, 0, "green" }, 
    { 127, 255, 0, "chartreuse" }, 
    { 0, 250, 154, "medium spring green" }, 
    { 0, 250, 154, "MediumSpringGreen" }, 
    { 173, 255, 47, "green yellow" }, 
    { 173, 255, 47, "GreenYellow" }, 
    { 50, 205, 50, "lime green" }, 
    { 50, 205, 50, "LimeGreen" }, 
    { 154, 205, 50, "yellow green" }, 
    { 154, 205, 50, "YellowGreen" }, 
    { 34, 139, 34, "forest green" }, 
    { 34, 139, 34, "ForestGreen" }, 
    { 107, 142, 35, "olive drab" }, 
    { 107, 142, 35, "OliveDrab" }, 
    { 189, 183, 107, "dark khaki" }, 
    { 189, 183, 107, "DarkKhaki" }, 
    { 240, 230, 140, "khaki" }, 
    { 238, 232, 170, "pale goldenrod" }, 
    { 238, 232, 170, "PaleGoldenrod" }, 
    { 250, 250, 210, "light goldenrod yellow" }, 
    { 250, 250, 210, "LightGoldenrodYellow" }, 
    { 255, 255, 224, "light yellow" }, 
    { 255, 255, 224, "LightYellow" }, 
    { 255, 255, 0, "yellow" }, 
    { 255, 215, 0, "gold" }, 
    { 238, 221, 130, "light goldenrod" }, 
    { 238, 221, 130, "LightGoldenrod" }, 
    { 218, 165, 32, "goldenrod" }, 
    { 184, 134, 11, "dark goldenrod" }, 
    { 184, 134, 11, "DarkGoldenrod" }, 
    { 188, 143, 143, "rosy brown" }, 
    { 188, 143, 143, "RosyBrown" }, 
    { 205, 92, 92, "indian red" }, 
    { 205, 92, 92, "IndianRed" }, 
    { 139, 69, 19, "saddle brown" }, 
    { 139, 69, 19, "SaddleBrown" }, 
    { 160, 82, 45, "sienna" }, 
    { 205, 133, 63, "peru" }, 
    { 222, 184, 135, "burlywood" }, 
    { 245, 245, 220, "beige" }, 
    { 245, 222, 179, "wheat" }, 
    { 244, 164, 96, "sandy brown" }, 
    { 244, 164, 96, "SandyBrown" }, 
    { 210, 180, 140, "tan" }, 
    { 210, 105, 30, "chocolate" }, 
    { 178, 34, 34, "firebrick" }, 
    { 165, 42, 42, "brown" }, 
    { 233, 150, 122, "dark salmon" }, 
    { 233, 150, 122, "DarkSalmon" }, 
    { 250, 128, 114, "salmon" }, 
    { 255, 160, 122, "light salmon" }, 
    { 255, 160, 122, "LightSalmon" }, 
    { 255, 165, 0, "orange" }, 
    { 255, 140, 0, "dark orange" }, 
    { 255, 140, 0, "DarkOrange" }, 
    { 255, 127, 80, "coral" }, 
    { 240, 128, 128, "light coral" }, 
    { 240, 128, 128, "LightCoral" }, 
    { 255, 99, 71, "tomato" }, 
    { 255, 69, 0, "orange red" }, 
    { 255, 69, 0, "OrangeRed" }, 
    { 255, 0, 0, "red" }, 
    { 255, 105, 180, "hot pink" }, 
    { 255, 105, 180, "HotPink" }, 
    { 255, 20, 147, "deep pink" }, 
    { 255, 20, 147, "DeepPink" }, 
    { 255, 192, 203, "pink" }, 
    { 255, 182, 193, "light pink" }, 
    { 255, 182, 193, "LightPink" }, 
    { 219, 112, 147, "pale violet red" }, 
    { 219, 112, 147, "PaleVioletRed" }, 
    { 176, 48, 96, "maroon" }, 
    { 199, 21, 133, "medium violet red" }, 
    { 199, 21, 133, "MediumVioletRed" }, 
    { 208, 32, 144, "violet red" }, 
    { 208, 32, 144, "VioletRed" }, 
    { 255, 0, 255, "magenta" }, 
    { 238, 130, 238, "violet" }, 
    { 221, 160, 221, "plum" }, 
    { 218, 112, 214, "orchid" }, 
    { 186, 85, 211, "medium orchid" }, 
    { 186, 85, 211, "MediumOrchid" }, 
    { 153, 50, 204, "dark orchid" }, 
    { 153, 50, 204, "DarkOrchid" }, 
    { 148, 0, 211, "dark violet" }, 
    { 148, 0, 211, "DarkViolet" }, 
    { 138, 43, 226, "blue violet" }, 
    { 138, 43, 226, "BlueViolet" }, 
    { 160, 32, 240, "purple" }, 
    { 147, 112, 219, "medium purple" }, 
    { 147, 112, 219, "MediumPurple" }, 
    { 216, 191, 216, "thistle" }, 
    { 255, 250, 250, "snow1" }, 
    { 238, 233, 233, "snow2" }, 
    { 205, 201, 201, "snow3" }, 
    { 139, 137, 137, "snow4" }, 
    { 255, 245, 238, "seashell1" }, 
    { 238, 229, 222, "seashell2" }, 
    { 205, 197, 191, "seashell3" }, 
    { 139, 134, 130, "seashell4" }, 
    { 255, 239, 219, "AntiqueWhite1" }, 
    { 238, 223, 204, "AntiqueWhite2" }, 
    { 205, 192, 176, "AntiqueWhite3" }, 
    { 139, 131, 120, "AntiqueWhite4" }, 
    { 255, 228, 196, "bisque1" }, 
    { 238, 213, 183, "bisque2" }, 
    { 205, 183, 158, "bisque3" }, 
    { 139, 125, 107, "bisque4" }, 
    { 255, 218, 185, "PeachPuff1" }, 
    { 238, 203, 173, "PeachPuff2" }, 
    { 205, 175, 149, "PeachPuff3" }, 
    { 139, 119, 101, "PeachPuff4" }, 
    { 255, 222, 173, "NavajoWhite1" }, 
    { 238, 207, 161, "NavajoWhite2" }, 
    { 205, 179, 139, "NavajoWhite3" }, 
    { 139, 121, 94, "NavajoWhite4" }, 
    { 255, 250, 205, "LemonChiffon1" }, 
    { 238, 233, 191, "LemonChiffon2" }, 
    { 205, 201, 165, "LemonChiffon3" }, 
    { 139, 137, 112, "LemonChiffon4" }, 
    { 255, 248, 220, "cornsilk1" }, 
    { 238, 232, 205, "cornsilk2" }, 
    { 205, 200, 177, "cornsilk3" }, 
    { 139, 136, 120, "cornsilk4" }, 
    { 255, 255, 240, "ivory1" }, 
    { 238, 238, 224, "ivory2" }, 
    { 205, 205, 193, "ivory3" }, 
    { 139, 139, 131, "ivory4" }, 
    { 240, 255, 240, "honeydew1" }, 
    { 224, 238, 224, "honeydew2" }, 
    { 193, 205, 193, "honeydew3" }, 
    { 131, 139, 131, "honeydew4" }, 
    { 255, 240, 245, "LavenderBlush1" }, 
    { 238, 224, 229, "LavenderBlush2" }, 
    { 205, 193, 197, "LavenderBlush3" }, 
    { 139, 131, 134, "LavenderBlush4" }, 
    { 255, 228, 225, "MistyRose1" }, 
    { 238, 213, 210, "MistyRose2" }, 
    { 205, 183, 181, "MistyRose3" }, 
    { 139, 125, 123, "MistyRose4" }, 
    { 240, 255, 255, "azure1" }, 
    { 224, 238, 238, "azure2" }, 
    { 193, 205, 205, "azure3" }, 
    { 131, 139, 139, "azure4" }, 
    { 131, 111, 255, "SlateBlue1" }, 
    { 122, 103, 238, "SlateBlue2" }, 
    { 105, 89, 205, "SlateBlue3" }, 
    { 71, 60, 139, "SlateBlue4" }, 
    { 72, 118, 255, "RoyalBlue1" }, 
    { 67, 110, 238, "RoyalBlue2" }, 
    { 58, 95, 205, "RoyalBlue3" }, 
    { 39, 64, 139, "RoyalBlue4" }, 
    { 0, 0, 255, "blue1" }, 
    { 0, 0, 238, "blue2" }, 
    { 0, 0, 205, "blue3" }, 
    { 0, 0, 139, "blue4" }, 
    { 30, 144, 255, "DodgerBlue1" }, 
    { 28, 134, 238, "DodgerBlue2" }, 
    { 24, 116, 205, "DodgerBlue3" }, 
    { 16, 78, 139, "DodgerBlue4" }, 
    { 99, 184, 255, "SteelBlue1" }, 
    { 92, 172, 238, "SteelBlue2" }, 
    { 79, 148, 205, "SteelBlue3" }, 
    { 54, 100, 139, "SteelBlue4" }, 
    { 0, 191, 255, "DeepSkyBlue1" }, 
    { 0, 178, 238, "DeepSkyBlue2" }, 
    { 0, 154, 205, "DeepSkyBlue3" }, 
    { 0, 104, 139, "DeepSkyBlue4" }, 
    { 135, 206, 255, "SkyBlue1" }, 
    { 126, 192, 238, "SkyBlue2" }, 
    { 108, 166, 205, "SkyBlue3" }, 
    { 74, 112, 139, "SkyBlue4" }, 
    { 176, 226, 255, "LightSkyBlue1" }, 
    { 164, 211, 238, "LightSkyBlue2" }, 
    { 141, 182, 205, "LightSkyBlue3" }, 
    { 96, 123, 139, "LightSkyBlue4" }, 
    { 198, 226, 255, "SlateGray1" }, 
    { 185, 211, 238, "SlateGray2" }, 
    { 159, 182, 205, "SlateGray3" }, 
    { 108, 123, 139, "SlateGray4" }, 
    { 202, 225, 255, "LightSteelBlue1" }, 
    { 188, 210, 238, "LightSteelBlue2" }, 
    { 162, 181, 205, "LightSteelBlue3" }, 
    { 110, 123, 139, "LightSteelBlue4" }, 
    { 191, 239, 255, "LightBlue1" }, 
    { 178, 223, 238, "LightBlue2" }, 
    { 154, 192, 205, "LightBlue3" }, 
    { 104, 131, 139, "LightBlue4" }, 
    { 224, 255, 255, "LightCyan1" }, 
    { 209, 238, 238, "LightCyan2" }, 
    { 180, 205, 205, "LightCyan3" }, 
    { 122, 139, 139, "LightCyan4" }, 
    { 187, 255, 255, "PaleTurquoise1" }, 
    { 174, 238, 238, "PaleTurquoise2" }, 
    { 150, 205, 205, "PaleTurquoise3" }, 
    { 102, 139, 139, "PaleTurquoise4" }, 
    { 152, 245, 255, "CadetBlue1" }, 
    { 142, 229, 238, "CadetBlue2" }, 
    { 122, 197, 205, "CadetBlue3" }, 
    { 83, 134, 139, "CadetBlue4" }, 
    { 0, 245, 255, "turquoise1" }, 
    { 0, 229, 238, "turquoise2" }, 
    { 0, 197, 205, "turquoise3" }, 
    { 0, 134, 139, "turquoise4" }, 
    { 0, 255, 255, "cyan1" }, 
    { 0, 238, 238, "cyan2" }, 
    { 0, 205, 205, "cyan3" }, 
    { 0, 139, 139, "cyan4" }, 
    { 151, 255, 255, "DarkSlateGray1" }, 
    { 141, 238, 238, "DarkSlateGray2" }, 
    { 121, 205, 205, "DarkSlateGray3" }, 
    { 82, 139, 139, "DarkSlateGray4" }, 
    { 127, 255, 212, "aquamarine1" }, 
    { 118, 238, 198, "aquamarine2" }, 
    { 102, 205, 170, "aquamarine3" }, 
    { 69, 139, 116, "aquamarine4" }, 
    { 193, 255, 193, "DarkSeaGreen1" }, 
    { 180, 238, 180, "DarkSeaGreen2" }, 
    { 155, 205, 155, "DarkSeaGreen3" }, 
    { 105, 139, 105, "DarkSeaGreen4" }, 
    { 84, 255, 159, "SeaGreen1" }, 
    { 78, 238, 148, "SeaGreen2" }, 
    { 67, 205, 128, "SeaGreen3" }, 
    { 46, 139, 87, "SeaGreen4" }, 
    { 154, 255, 154, "PaleGreen1" }, 
    { 144, 238, 144, "PaleGreen2" }, 
    { 124, 205, 124, "PaleGreen3" }, 
    { 84, 139, 84, "PaleGreen4" }, 
    { 0, 255, 127, "SpringGreen1" }, 
    { 0, 238, 118, "SpringGreen2" }, 
    { 0, 205, 102, "SpringGreen3" }, 
    { 0, 139, 69, "SpringGreen4" }, 
    { 0, 255, 0, "green1" }, 
    { 0, 238, 0, "green2" }, 
    { 0, 205, 0, "green3" }, 
    { 0, 139, 0, "green4" }, 
    { 127, 255, 0, "chartreuse1" }, 
    { 118, 238, 0, "chartreuse2" }, 
    { 102, 205, 0, "chartreuse3" }, 
    { 69, 139, 0, "chartreuse4" }, 
    { 192, 255, 62, "OliveDrab1" }, 
    { 179, 238, 58, "OliveDrab2" }, 
    { 154, 205, 50, "OliveDrab3" }, 
    { 105, 139, 34, "OliveDrab4" }, 
    { 202, 255, 112, "DarkOliveGreen1" }, 
    { 188, 238, 104, "DarkOliveGreen2" }, 
    { 162, 205, 90, "DarkOliveGreen3" }, 
    { 110, 139, 61, "DarkOliveGreen4" }, 
    { 255, 246, 143, "khaki1" }, 
    { 238, 230, 133, "khaki2" }, 
    { 205, 198, 115, "khaki3" }, 
    { 139, 134, 78, "khaki4" }, 
    { 255, 236, 139, "LightGoldenrod1" }, 
    { 238, 220, 130, "LightGoldenrod2" }, 
    { 205, 190, 112, "LightGoldenrod3" }, 
    { 139, 129, 76, "LightGoldenrod4" }, 
    { 255, 255, 224, "LightYellow1" }, 
    { 238, 238, 209, "LightYellow2" }, 
    { 205, 205, 180, "LightYellow3" }, 
    { 139, 139, 122, "LightYellow4" }, 
    { 255, 255, 0, "yellow1" }, 
    { 238, 238, 0, "yellow2" }, 
    { 205, 205, 0, "yellow3" }, 
    { 139, 139, 0, "yellow4" }, 
    { 255, 215, 0, "gold1" }, 
    { 238, 201, 0, "gold2" }, 
    { 205, 173, 0, "gold3" }, 
    { 139, 117, 0, "gold4" }, 
    { 255, 193, 37, "goldenrod1" }, 
    { 238, 180, 34, "goldenrod2" }, 
    { 205, 155, 29, "goldenrod3" }, 
    { 139, 105, 20, "goldenrod4" }, 
    { 255, 185, 15, "DarkGoldenrod1" }, 
    { 238, 173, 14, "DarkGoldenrod2" }, 
    { 205, 149, 12, "DarkGoldenrod3" }, 
    { 139, 101, 8, "DarkGoldenrod4" }, 
    { 255, 193, 193, "RosyBrown1" }, 
    { 238, 180, 180, "RosyBrown2" }, 
    { 205, 155, 155, "RosyBrown3" }, 
    { 139, 105, 105, "RosyBrown4" }, 
    { 255, 106, 106, "IndianRed1" }, 
    { 238, 99, 99, "IndianRed2" }, 
    { 205, 85, 85, "IndianRed3" }, 
    { 139, 58, 58, "IndianRed4" }, 
    { 255, 130, 71, "sienna1" }, 
    { 238, 121, 66, "sienna2" }, 
    { 205, 104, 57, "sienna3" }, 
    { 139, 71, 38, "sienna4" }, 
    { 255, 211, 155, "burlywood1" }, 
    { 238, 197, 145, "burlywood2" }, 
    { 205, 170, 125, "burlywood3" }, 
    { 139, 115, 85, "burlywood4" }, 
    { 255, 231, 186, "wheat1" }, 
    { 238, 216, 174, "wheat2" }, 
    { 205, 186, 150, "wheat3" }, 
    { 139, 126, 102, "wheat4" }, 
    { 255, 165, 79, "tan1" }, 
    { 238, 154, 73, "tan2" }, 
    { 205, 133, 63, "tan3" }, 
    { 139, 90, 43, "tan4" }, 
    { 255, 127, 36, "chocolate1" }, 
    { 238, 118, 33, "chocolate2" }, 
    { 205, 102, 29, "chocolate3" }, 
    { 139, 69, 19, "chocolate4" }, 
    { 255, 48, 48, "firebrick1" }, 
    { 238, 44, 44, "firebrick2" }, 
    { 205, 38, 38, "firebrick3" }, 
    { 139, 26, 26, "firebrick4" }, 
    { 255, 64, 64, "brown1" }, 
    { 238, 59, 59, "brown2" }, 
    { 205, 51, 51, "brown3" }, 
    { 139, 35, 35, "brown4" }, 
    { 255, 140, 105, "salmon1" }, 
    { 238, 130, 98, "salmon2" }, 
    { 205, 112, 84, "salmon3" }, 
    { 139, 76, 57, "salmon4" }, 
    { 255, 160, 122, "LightSalmon1" }, 
    { 238, 149, 114, "LightSalmon2" }, 
    { 205, 129, 98, "LightSalmon3" }, 
    { 139, 87, 66, "LightSalmon4" }, 
    { 255, 165, 0, "orange1" }, 
    { 238, 154, 0, "orange2" }, 
    { 205, 133, 0, "orange3" }, 
    { 139, 90, 0, "orange4" }, 
    { 255, 127, 0, "DarkOrange1" }, 
    { 238, 118, 0, "DarkOrange2" }, 
    { 205, 102, 0, "DarkOrange3" }, 
    { 139, 69, 0, "DarkOrange4" }, 
    { 255, 114, 86, "coral1" }, 
    { 238, 106, 80, "coral2" }, 
    { 205, 91, 69, "coral3" }, 
    { 139, 62, 47, "coral4" }, 
    { 255, 99, 71, "tomato1" }, 
    { 238, 92, 66, "tomato2" }, 
    { 205, 79, 57, "tomato3" }, 
    { 139, 54, 38, "tomato4" }, 
    { 255, 69, 0, "OrangeRed1" }, 
    { 238, 64, 0, "OrangeRed2" }, 
    { 205, 55, 0, "OrangeRed3" }, 
    { 139, 37, 0, "OrangeRed4" }, 
    { 255, 0, 0, "red1" }, 
    { 238, 0, 0, "red2" }, 
    { 205, 0, 0, "red3" }, 
    { 139, 0, 0, "red4" }, 
    { 255, 20, 147, "DeepPink1" }, 
    { 238, 18, 137, "DeepPink2" }, 
    { 205, 16, 118, "DeepPink3" }, 
    { 139, 10, 80, "DeepPink4" }, 
    { 255, 110, 180, "HotPink1" }, 
    { 238, 106, 167, "HotPink2" }, 
    { 205, 96, 144, "HotPink3" }, 
    { 139, 58, 98, "HotPink4" }, 
    { 255, 181, 197, "pink1" }, 
    { 238, 169, 184, "pink2" }, 
    { 205, 145, 158, "pink3" }, 
    { 139, 99, 108, "pink4" }, 
    { 255, 174, 185, "LightPink1" }, 
    { 238, 162, 173, "LightPink2" }, 
    { 205, 140, 149, "LightPink3" }, 
    { 139, 95, 101, "LightPink4" }, 
    { 255, 130, 171, "PaleVioletRed1" }, 
    { 238, 121, 159, "PaleVioletRed2" }, 
    { 205, 104, 137, "PaleVioletRed3" }, 
    { 139, 71, 93, "PaleVioletRed4" }, 
    { 255, 52, 179, "maroon1" }, 
    { 238, 48, 167, "maroon2" }, 
    { 205, 41, 144, "maroon3" }, 
    { 139, 28, 98, "maroon4" }, 
    { 255, 62, 150, "VioletRed1" }, 
    { 238, 58, 140, "VioletRed2" }, 
    { 205, 50, 120, "VioletRed3" }, 
    { 139, 34, 82, "VioletRed4" }, 
    { 255, 0, 255, "magenta1" }, 
    { 238, 0, 238, "magenta2" }, 
    { 205, 0, 205, "magenta3" }, 
    { 139, 0, 139, "magenta4" }, 
    { 255, 131, 250, "orchid1" }, 
    { 238, 122, 233, "orchid2" }, 
    { 205, 105, 201, "orchid3" }, 
    { 139, 71, 137, "orchid4" }, 
    { 255, 187, 255, "plum1" }, 
    { 238, 174, 238, "plum2" }, 
    { 205, 150, 205, "plum3" }, 
    { 139, 102, 139, "plum4" }, 
    { 224, 102, 255, "MediumOrchid1" }, 
    { 209, 95, 238, "MediumOrchid2" }, 
    { 180, 82, 205, "MediumOrchid3" }, 
    { 122, 55, 139, "MediumOrchid4" }, 
    { 191, 62, 255, "DarkOrchid1" }, 
    { 178, 58, 238, "DarkOrchid2" }, 
    { 154, 50, 205, "DarkOrchid3" }, 
    { 104, 34, 139, "DarkOrchid4" }, 
    { 155, 48, 255, "purple1" }, 
    { 145, 44, 238, "purple2" }, 
    { 125, 38, 205, "purple3" }, 
    { 85, 26, 139, "purple4" }, 
    { 171, 130, 255, "MediumPurple1" }, 
    { 159, 121, 238, "MediumPurple2" }, 
    { 137, 104, 205, "MediumPurple3" }, 
    { 93, 71, 139, "MediumPurple4" }, 
    { 255, 225, 255, "thistle1" }, 
    { 238, 210, 238, "thistle2" }, 
    { 205, 181, 205, "thistle3" }, 
    { 139, 123, 139, "thistle4" }, 
    { 0, 0, 0, "gray0" }, 
    { 0, 0, 0, "grey0" }, 
    { 3, 3, 3, "gray1" }, 
    { 3, 3, 3, "grey1" }, 
    { 5, 5, 5, "gray2" }, 
    { 5, 5, 5, "grey2" }, 
    { 8, 8, 8, "gray3" }, 
    { 8, 8, 8, "grey3" }, 
    { 10, 10, 10, "gray4" }, 
    { 10, 10, 10, "grey4" }, 
    { 13, 13, 13, "gray5" }, 
    { 13, 13, 13, "grey5" }, 
    { 15, 15, 15, "gray6" }, 
    { 15, 15, 15, "grey6" }, 
    { 18, 18, 18, "gray7" }, 
    { 18, 18, 18, "grey7" }, 
    { 20, 20, 20, "gray8" }, 
    { 20, 20, 20, "grey8" }, 
    { 23, 23, 23, "gray9" }, 
    { 23, 23, 23, "grey9" }, 
    { 26, 26, 26, "gray10" }, 
    { 26, 26, 26, "grey10" }, 
    { 28, 28, 28, "gray11" }, 
    { 28, 28, 28, "grey11" }, 
    { 31, 31, 31, "gray12" }, 
    { 31, 31, 31, "grey12" }, 
    { 33, 33, 33, "gray13" }, 
    { 33, 33, 33, "grey13" }, 
    { 36, 36, 36, "gray14" }, 
    { 36, 36, 36, "grey14" }, 
    { 38, 38, 38, "gray15" }, 
    { 38, 38, 38, "grey15" }, 
    { 41, 41, 41, "gray16" }, 
    { 41, 41, 41, "grey16" }, 
    { 43, 43, 43, "gray17" }, 
    { 43, 43, 43, "grey17" }, 
    { 46, 46, 46, "gray18" }, 
    { 46, 46, 46, "grey18" }, 
    { 48, 48, 48, "gray19" }, 
    { 48, 48, 48, "grey19" }, 
    { 51, 51, 51, "gray20" }, 
    { 51, 51, 51, "grey20" }, 
    { 54, 54, 54, "gray21" }, 
    { 54, 54, 54, "grey21" }, 
    { 56, 56, 56, "gray22" }, 
    { 56, 56, 56, "grey22" }, 
    { 59, 59, 59, "gray23" }, 
    { 59, 59, 59, "grey23" }, 
    { 61, 61, 61, "gray24" }, 
    { 61, 61, 61, "grey24" }, 
    { 64, 64, 64, "gray25" }, 
    { 64, 64, 64, "grey25" }, 
    { 66, 66, 66, "gray26" }, 
    { 66, 66, 66, "grey26" }, 
    { 69, 69, 69, "gray27" }, 
    { 69, 69, 69, "grey27" }, 
    { 71, 71, 71, "gray28" }, 
    { 71, 71, 71, "grey28" }, 
    { 74, 74, 74, "gray29" }, 
    { 74, 74, 74, "grey29" }, 
    { 77, 77, 77, "gray30" }, 
    { 77, 77, 77, "grey30" }, 
    { 79, 79, 79, "gray31" }, 
    { 79, 79, 79, "grey31" }, 
    { 82, 82, 82, "gray32" }, 
    { 82, 82, 82, "grey32" }, 
    { 84, 84, 84, "gray33" }, 
    { 84, 84, 84, "grey33" }, 
    { 87, 87, 87, "gray34" }, 
    { 87, 87, 87, "grey34" }, 
    { 89, 89, 89, "gray35" }, 
    { 89, 89, 89, "grey35" }, 
    { 92, 92, 92, "gray36" }, 
    { 92, 92, 92, "grey36" }, 
    { 94, 94, 94, "gray37" }, 
    { 94, 94, 94, "grey37" }, 
    { 97, 97, 97, "gray38" }, 
    { 97, 97, 97, "grey38" }, 
    { 99, 99, 99, "gray39" }, 
    { 99, 99, 99, "grey39" }, 
    { 102, 102, 102, "gray40" }, 
    { 102, 102, 102, "grey40" }, 
    { 105, 105, 105, "gray41" }, 
    { 105, 105, 105, "grey41" }, 
    { 107, 107, 107, "gray42" }, 
    { 107, 107, 107, "grey42" }, 
    { 110, 110, 110, "gray43" }, 
    { 110, 110, 110, "grey43" }, 
    { 112, 112, 112, "gray44" }, 
    { 112, 112, 112, "grey44" }, 
    { 115, 115, 115, "gray45" }, 
    { 115, 115, 115, "grey45" }, 
    { 117, 117, 117, "gray46" }, 
    { 117, 117, 117, "grey46" }, 
    { 120, 120, 120, "gray47" }, 
    { 120, 120, 120, "grey47" }, 
    { 122, 122, 122, "gray48" }, 
    { 122, 122, 122, "grey48" }, 
    { 125, 125, 125, "gray49" }, 
    { 125, 125, 125, "grey49" }, 
    { 127, 127, 127, "gray50" }, 
    { 127, 127, 127, "grey50" }, 
    { 130, 130, 130, "gray51" }, 
    { 130, 130, 130, "grey51" }, 
    { 133, 133, 133, "gray52" }, 
    { 133, 133, 133, "grey52" }, 
    { 135, 135, 135, "gray53" }, 
    { 135, 135, 135, "grey53" }, 
    { 138, 138, 138, "gray54" }, 
    { 138, 138, 138, "grey54" }, 
    { 140, 140, 140, "gray55" }, 
    { 140, 140, 140, "grey55" }, 
    { 143, 143, 143, "gray56" }, 
    { 143, 143, 143, "grey56" }, 
    { 145, 145, 145, "gray57" }, 
    { 145, 145, 145, "grey57" }, 
    { 148, 148, 148, "gray58" }, 
    { 148, 148, 148, "grey58" }, 
    { 150, 150, 150, "gray59" }, 
    { 150, 150, 150, "grey59" }, 
    { 153, 153, 153, "gray60" }, 
    { 153, 153, 153, "grey60" }, 
    { 156, 156, 156, "gray61" }, 
    { 156, 156, 156, "grey61" }, 
    { 158, 158, 158, "gray62" }, 
    { 158, 158, 158, "grey62" }, 
    { 161, 161, 161, "gray63" }, 
    { 161, 161, 161, "grey63" }, 
    { 163, 163, 163, "gray64" }, 
    { 163, 163, 163, "grey64" }, 
    { 166, 166, 166, "gray65" }, 
    { 166, 166, 166, "grey65" }, 
    { 168, 168, 168, "gray66" }, 
    { 168, 168, 168, "grey66" }, 
    { 171, 171, 171, "gray67" }, 
    { 171, 171, 171, "grey67" }, 
    { 173, 173, 173, "gray68" }, 
    { 173, 173, 173, "grey68" }, 
    { 176, 176, 176, "gray69" }, 
    { 176, 176, 176, "grey69" }, 
    { 179, 179, 179, "gray70" }, 
    { 179, 179, 179, "grey70" }, 
    { 181, 181, 181, "gray71" }, 
    { 181, 181, 181, "grey71" }, 
    { 184, 184, 184, "gray72" }, 
    { 184, 184, 184, "grey72" }, 
    { 186, 186, 186, "gray73" }, 
    { 186, 186, 186, "grey73" }, 
    { 189, 189, 189, "gray74" }, 
    { 189, 189, 189, "grey74" }, 
    { 191, 191, 191, "gray75" }, 
    { 191, 191, 191, "grey75" }, 
    { 194, 194, 194, "gray76" }, 
    { 194, 194, 194, "grey76" }, 
    { 196, 196, 196, "gray77" }, 
    { 196, 196, 196, "grey77" }, 
    { 199, 199, 199, "gray78" }, 
    { 199, 199, 199, "grey78" }, 
    { 201, 201, 201, "gray79" }, 
    { 201, 201, 201, "grey79" }, 
    { 204, 204, 204, "gray80" }, 
    { 204, 204, 204, "grey80" }, 
    { 207, 207, 207, "gray81" }, 
    { 207, 207, 207, "grey81" }, 
    { 209, 209, 209, "gray82" }, 
    { 209, 209, 209, "grey82" }, 
    { 212, 212, 212, "gray83" }, 
    { 212, 212, 212, "grey83" }, 
    { 214, 214, 214, "gray84" }, 
    { 214, 214, 214, "grey84" }, 
    { 217, 217, 217, "gray85" }, 
    { 217, 217, 217, "grey85" }, 
    { 219, 219, 219, "gray86" }, 
    { 219, 219, 219, "grey86" }, 
    { 222, 222, 222, "gray87" }, 
    { 222, 222, 222, "grey87" }, 
    { 224, 224, 224, "gray88" }, 
    { 224, 224, 224, "grey88" }, 
    { 227, 227, 227, "gray89" }, 
    { 227, 227, 227, "grey89" }, 
    { 229, 229, 229, "gray90" }, 
    { 229, 229, 229, "grey90" }, 
    { 232, 232, 232, "gray91" }, 
    { 232, 232, 232, "grey91" }, 
    { 235, 235, 235, "gray92" }, 
    { 235, 235, 235, "grey92" }, 
    { 237, 237, 237, "gray93" }, 
    { 237, 237, 237, "grey93" }, 
    { 240, 240, 240, "gray94" }, 
    { 240, 240, 240, "grey94" }, 
    { 242, 242, 242, "gray95" }, 
    { 242, 242, 242, "grey95" }, 
    { 245, 245, 245, "gray96" }, 
    { 245, 245, 245, "grey96" }, 
    { 247, 247, 247, "gray97" }, 
    { 247, 247, 247, "grey97" }, 
    { 250, 250, 250, "gray98" }, 
    { 250, 250, 250, "grey98" }, 
    { 252, 252, 252, "gray99" }, 
    { 252, 252, 252, "grey99" }, 
    { 255, 255, 255, "gray100" }, 
    { 255, 255, 255, "grey100" }, 
    { 169, 169, 169, "dark grey" }, 
    { 169, 169, 169, "DarkGrey" }, 
    { 169, 169, 169, "dark gray" }, 
    { 169, 169, 169, "DarkGray" }, 
    { 0, 0, 139, "dark blue" }, 
    { 0, 0, 139, "DarkBlue" }, 
    { 0, 139, 139, "dark cyan" }, 
    { 0, 139, 139, "DarkCyan" }, 
    { 139, 0, 139, "dark magenta" }, 
    { 139, 0, 139, "DarkMagenta" }, 
    { 139, 0, 0, "dark red" }, 
    { 139, 0, 0, "DarkRed" }, 
    { 144, 238, 144, "light green" }, 
    { 144, 238, 144, "LightGreen" },
    { 0, 0, 0, NULL}
};

int Str2RGB(const char *name, int *r, int *g, int *b)
{
    int i;
    for(i=0;RGBTable[i].name!=NULL;i++)
    {
        if(strcmp(name, RGBTable[i].name)==0)
            break;
    }
    *r=RGBTable[i].r;
    *g=RGBTable[i].g;
    *b=RGBTable[i].b;
    return RGBTable[i].name!=NULL;
}            
void AllocColors()
{
    int i, len, r, g, b;

    Str2RGB(bgcolor_name,&r,&g,&b);
    win->bgcolor=AllocShortRGBColor(r,g,b);
#ifdef debug_display
    printf("bgcolor=%s %d %d %d\n",bgcolor_name,r,g,b);
#endif
    for(i=0;i<MAXCOLOR;i++)
    {
        len = strlen(color_name[i]);
        if((len>0)&&(len<COLORNAMELEN))
        {
          Str2RGB(color_name[i],&r,&g,&b);
          colors[i]=AllocShortRGBColor(r,g,b);
//            colors[i]=win->AllocNamedColor(color_name[i]);
        }
    }
    win->framecolor=colors[10];
}

void WinSemRemove()
{
    win->RemoveSem();
    win->RemoveSem2();
}

void WinLock()
{
    win->Lock();
}

void WinUnlock()
{
    win->Unlock();
}

void WinClear()
{
    win->Clear();
}

int WinAlive()
{
    if(win==NULL) return 0;
    else
        return win->alive;
}

int WinIsPaused()
{
    if(win==NULL) return 0;
    else
        return win->pause;
}

int WinTogglePause()
{
    if(win==NULL) return 0;
    else
        return win->TogglePause();
}

void WinRefresh()
{
    win->Refresh();
}

void WinRoutine()
{
    win->Routine();
}

void WinEvolve()
{
    win->Evolve();
}

void WinWritePS()
{
    win->writeps();
}

void WinDrawPoint(double x,double y,double z,double r,
                  unsigned long color,unsigned long attr)
{
    win->DrawPoint(x,y,z,r,color,attr);
}

/*
 * gh - Added new parameters radiusInPixels and lMax.
 *      radiusInPixels flag indicating whether the radius should be
 *                     considered a distance in pixels, or a distance
 *                     in units of b.
 *      lMax           length (in units of b) of the largest dimension
 *                     of the simulation space.
 */
void WinDrawPointS(double x,double y,double z,double r,
                   int radiusInPixels, double lMax,
                  unsigned long color,unsigned long attr,char *s)
{
    win->DrawPoint(x,y,z,r,radiusInPixels,lMax,color,s,attr);
}


void WinDrawLine(double x0,double y0,double z0,
                 double x1,double y1,double z1,
                 unsigned long color,
                 double r,unsigned long attr)
{
    win->DrawLine(x0,y0,z0,x1,y1,z1,color,r,attr);
}

unsigned long AllocShortRGBColor(unsigned r, unsigned g, unsigned b)
{
    return win->AllocShortRGBColor(r,g,b);
}

void Sleep()
{
    sleep(sleepseconds);
}

#endif
